#include <bits/stdc++.h>

using namespace std;

int main() {

    int   i;
    float f;

    /*------------------------------------------------------------------------*/
    /*   格式化输出函数 printf 的用法 例子                                      */
    /*------------------------------------------------------------------------*/

    /*
      格式控制符 %d, %i 表示按 整形数的格式来进行打印
    */
    printf("%d\n", 90);
    i = 90;
    printf("%d\n", i);
    printf("\n");

    printf("%d\n", (int)90.312);
    f = 90.312;
    printf("%d\n", (int)f);
    printf("\n");

    // --- 注意: 如下是错误的使用方式，"格式控制符要求的类型" 和 "要打印的数据的类型" 不匹配!
    printf("%d\n", 90.312);  // -- 特别注意: 浮点数的存储格式和整形数不同，浮点数的存储格式比较复杂，要打印浮点数不要使用这种方式!
    printf("%d\n", f);       // -- 特别注意：浮点数的存储格式和整形数不同，浮点数的存储格式比较复杂，要打印浮点数不要使用这种方式!
    printf("\n");

    /*
      格式控制符 %f 表示按 浮点数的格式来进行打印
    */
    printf("%f\n", 90.312);
    printf("%.2f\n", 90.312);   // 格式控制符 %.2f 表示按浮点数的格式来进行打印, 并且打印时只保留 2 位小数
    printf("\n");

    // --- 注意: 如下是错误的使用方式，"格式控制符要求的类型" 和 "要打印的数据的类型" 不匹配!
    printf("%f\n", 90);   // -- 特别注意: 浮点数的存储格式和整形数不同，浮点数的存储格式比较复杂，要打印整形数不要使用这种方式!
    printf("\n");

    /*
      一个格式控制字符串中 使用了多个格式控制符
    */
    printf("%dabc%.3f\n", 125, 0.12345);
    printf("\n");

    cout << """--- test for cout: ---""" << endl;
    cout << 90.312 << endl;
    cout << (int)90.312 << endl;
    cout << int(100.312) << endl;
    cout << 90 << endl;

    /*------------------------------------------------------------------------*/
    /*   格式化输入函数 scanf 的用法 例子                                       */
    /*------------------------------------------------------------------------*/
    int j1 = 0;

    printf("----------------------------------------------\n");
    printf("  scanf \n");
    printf("----------------------------------------------\n");

    printf("pleas input value for j1: ");
    scanf("%d", &j1);
    printf("%d", j1);

    /*
      说明: 这个例子非常典型, 描叙了 scanf 的用法, 上面的代码运行结果如下:
      [输入1]:
        5.2
      [输出1]:
        j1: 5
      [输入2]:
        52
      [输出2]:
        j1: 52
    */

    return 0;
}